<!DOCTYPE html>
<html>
  <head>
    <meta >
  </head>

  <body>

    <p></p>
    <script type="text/javascript">
      let a = '100'
      let b = a
      a = 200
      console.log(`a:${a}b:${b}`);

      let student = {
        name: '李四',
        age: 19,
      }

      // 浅拷贝
      // let student2 = student
      console.log(JSON.stringify(student));
      // 深拷贝 JSON.parse JSON.stringify
      let student2 = JSON.parse(JSON.stringify(student))
      student.age = 22
      
      console.log(`student:${student.age}，student2:${student2.age}`);
      
      // 深拷贝 JSON.parse JSON.stringify 缺点
      // 1、如果obj里面存在时间对象,JSON.parse(JSON.stringify(obj))之后，时间对象变成了字符串。
      // 2、如果obj里有RegExp、Error对象，则序列化的结果将只得到空对象。
      // 3、如果obj里有函数，undefined，则序列化的结果会把函数， undefined丢失。
      // 4、如果obj里有NaN、Infinity和-Infinity，则序列化的结果会变成null。
      // 5、JSON.stringify()只能序列化对象的可枚举的自有属性。如果obj中的对象是有构造函数生成的， 则使用JSON.parse(JSON.stringify(obj))深拷贝后，会丢弃对象的constructor。
      // 6、如果对象中存在循环引用的情况也无法正确实现深拷贝。
      let object1 = {
        name: '对象1',
        callback: function(){
          console.log(11111);
        },
        title: {
          label: '深层对象',
          value: 2
        }
      }
      let object2 = JSON.parse(JSON.stringify(object1));
      console.log(object1);
      console.log(object2);

      // 深拷贝方法
      // 1.JSON.parse JSON.stringify
      // 2.自定义递归方法
      // 3.工具类，如lodash => lodash.DeepClone

      let nums = [1, 2, 3]
      nums.push(1, 2, 3)
      console.log(nums);
      nums.unshift(-2, -1, 0)
      console.log(nums);

      // 删除数组元素值
      nums.splice(3, 2)
      console.log(nums);
      // 添加数组元素值
      nums.splice(3, 0, 9, 8)
      console.log(nums);


      // 
      let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      let newArr = []
      let number = 1
      arr.forEach(num => {
        arr.forEach(num2 => {

          if(num + num2 === 10){
            newArr.push([num, num2])
          }
          console.log(number ++);
        })
      })
      console.log(newArr);

      // 冒泡排序
      let array9 = [89, 67, 100, 4, 68, 54, 2, 98]
      for (let i = 0; i < array9.length; i++) {
        for (let j = 0; j < array9.length - i; j++) {
          if(array9[j] > array9[j + 1]){
            let tmp = array9[j]
            array9[j] = array9[j + 1]
            array9[j + 1] = tmp
          }
        }
      }
      console.log(array9);

    </script>
  </body>
</html>